package entity

type LabelMap map[string]Label

func (m LabelMap) Get(name string) Label {
	if result, ok := m[name]; ok {
		return result
	}

	return *NewLabel(name, 0)
}

func (m LabelMap) Pointer(name string) *Label {
	if result, ok := m[name]; ok {
		return &result
	}

	return NewLabel(name, 0)
}

func (m LabelMap) PhotoLabel(photoId uint, labelName string, uncertainty int, source string) PhotoLabel {
	label := m.Get(labelName)

	photoLabel := NewPhotoLabel(photoId, label.ID, uncertainty, source)
	photoLabel.Label = &label

	return *photoLabel
}

var LabelFixtures = LabelMap{
	"landscape": {
		ID:               1000000,
		LabelUID:         "ls6sg6b1wowuy3c2",
		LabelSlug:        "landscape",
		CustomSlug:       "landscape",
		LabelName:        "Landscape",
		LabelPriority:    0,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"flower": {
		ID:               1000001,
		LabelUID:         "ls6sg6b1wowuy3c3",
		LabelSlug:        "flower",
		CustomSlug:       "flower",
		LabelName:        "Flower",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       2,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"cake": {
		ID:               1000002,
		LabelUID:         "ls6sg6b1wowuy3c4",
		LabelSlug:        "cake",
		CustomSlug:       "kuchen",
		LabelName:        "Cake",
		LabelPriority:    5,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       3,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"cow": {
		ID:               1000003,
		LabelUID:         "ls6sg6b1wowuy3c5",
		LabelSlug:        "cow",
		CustomSlug:       "kuh",
		LabelName:        "COW",
		LabelPriority:    -1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       4,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"batchdelete": {
		ID:               1000004,
		LabelUID:         "ls6sg6b1wowuy3c6",
		LabelSlug:        "batch-delete",
		CustomSlug:       "batch-delete",
		LabelName:        "Batch Delete",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       5,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"updateLabel": {
		ID:               1000005,
		LabelUID:         "ls6sg6b1wowuy3c7",
		LabelSlug:        "update-label",
		CustomSlug:       "update-label",
		LabelName:        "Update Label",
		LabelPriority:    2,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"updatePhotoLabel": {
		ID:               1000006,
		LabelUID:         "ls6sg6b1wowuy3c8",
		LabelSlug:        "update-photo-label",
		CustomSlug:       "update-label-photo",
		LabelName:        "Update Photo Label",
		LabelPriority:    2,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"likeLabel": {
		ID:               1000007,
		LabelUID:         "ls6sg6b1wowuy3c9",
		LabelSlug:        "like-label",
		CustomSlug:       "like-label",
		LabelName:        "Like Label",
		LabelPriority:    3,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"no-jpeg": {
		ID:               1000008,
		LabelUID:         "lt9k3aa1wowuy310",
		LabelSlug:        "no-jpeg",
		CustomSlug:       "no-jpeg",
		LabelName:        "NO JPEG",
		LabelPriority:    -1,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       4,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"apilikeLabel": {
		ID:               1000009,
		LabelUID:         "ls6sg6b1wowuy311",
		LabelSlug:        "api-like-label",
		CustomSlug:       "api-like-label",
		LabelName:        "Api Like Label",
		LabelPriority:    -1,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"apidislikeLabel": {
		ID:               1000010,
		LabelUID:         "ls6sg6b1wowuy312",
		LabelSlug:        "api-dislike-label",
		CustomSlug:       "api-dislike-label",
		LabelName:        "Api Dislike Label",
		LabelPriority:    -2,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"%tennis": {
		ID:               1000011,
		LabelUID:         "ls6sg6b1wowuy313",
		LabelSlug:        "%tennis",
		CustomSlug:       "%tennis",
		LabelName:        "%tennis",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"chem%stry": {
		ID:               1000012,
		LabelUID:         "ls6sg6b1wowuy314",
		LabelSlug:        "chem%stry",
		CustomSlug:       "chem%stry",
		LabelName:        "chem%stry",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"cell%": {
		ID:               1000013,
		LabelUID:         "ls6sg6b1wowuy315",
		LabelSlug:        "cell%",
		CustomSlug:       "cell%",
		LabelName:        "cell%",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"&friendship": {
		ID:               1000014,
		LabelUID:         "ls6sg6b1wowuy316",
		LabelSlug:        "&friendship",
		CustomSlug:       "&friendship",
		LabelName:        "&friendship",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"construction&failure": {
		ID:               1000015,
		LabelUID:         "ls6sg6b1wowuy317",
		LabelSlug:        "construction&failure",
		CustomSlug:       "construction&failure",
		LabelName:        "construction&failure",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"goal&": {
		ID:               1000016,
		LabelUID:         "ls6sg6b1wowuy318",
		LabelSlug:        "goal&",
		CustomSlug:       "goal&",
		LabelName:        "goal&",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"'activity": {
		ID:               1000017,
		LabelUID:         "ls6sg6b1wowuy319",
		LabelSlug:        "'activity",
		CustomSlug:       "'activity",
		LabelName:        "'activity",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"funera'l": {
		ID:               1000018,
		LabelUID:         "ls6sg6b1wowuy320",
		LabelSlug:        "funera'l",
		CustomSlug:       "funera'l",
		LabelName:        "funera'l",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"technology'": {
		ID:               1000019,
		LabelUID:         "ls6sg6b1wowuy321",
		LabelSlug:        "technology'",
		CustomSlug:       "technology'",
		LabelName:        "technology'",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"*tea": {
		ID:               1000020,
		LabelUID:         "ls6sg6b1wowuy322",
		LabelSlug:        "*tea",
		CustomSlug:       "*tea",
		LabelName:        "*tea",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"soup*menu": {
		ID:               1000021,
		LabelUID:         "ls6sg6b1wowuy323",
		LabelSlug:        "soup*menu",
		CustomSlug:       "soup*menu",
		LabelName:        "soup*menu",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"proposal*": {
		ID:               1000022,
		LabelUID:         "ls6sg6b1wowuy324",
		LabelSlug:        "proposal*",
		CustomSlug:       "proposal*",
		LabelName:        "proposal*",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"|college": {
		ID:               1000023,
		LabelUID:         "ls6sg6b1wowuy325",
		LabelSlug:        "|college",
		CustomSlug:       "|college",
		LabelName:        "|college",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"potato|couch": {
		ID:               1000024,
		LabelUID:         "ls6sg6b1wowuy326",
		LabelSlug:        "potato|couch",
		CustomSlug:       "potato|couch",
		LabelName:        "potato|couch",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"mall|": {
		ID:               1000025,
		LabelUID:         "ls6sg6b1wowuy327",
		LabelSlug:        "mall|",
		CustomSlug:       "mall|",
		LabelName:        "mall|",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"2020-world": {
		ID:               1000026,
		LabelUID:         "ls6sg6b1wowuy328",
		LabelSlug:        "2020-world",
		CustomSlug:       "2020-world",
		LabelName:        "2020-world",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"sport-2021-event": {
		ID:               1000027,
		LabelUID:         "ls6sg6b1wowuy329",
		LabelSlug:        "sport-2021-event",
		CustomSlug:       "sport-2021-event",
		LabelName:        "Sport 2021 Event",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"oven-3000": {
		ID:               1000028,
		LabelUID:         "ls6sg6b1wowuy330",
		LabelSlug:        "oven-3000",
		CustomSlug:       "oven-3000",
		LabelName:        "Oven3000",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"\"king": {
		ID:               1000029,
		LabelUID:         "ls6sg6b1wowuy331",
		LabelSlug:        "\"king",
		CustomSlug:       "\"king",
		LabelName:        "\"king",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"town\"ship": {
		ID:               1000030,
		LabelUID:         "ls6sg6b1wowuy332",
		LabelSlug:        "town\"ship",
		CustomSlug:       "town\"ship",
		LabelName:        "town\"ship",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
	"ladder\"": {
		ID:               1000031,
		LabelUID:         "ls6sg6b1wowuy333",
		LabelSlug:        "ladder\"",
		CustomSlug:       "ladder\"",
		LabelName:        "ladder\"",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        Now(),
		UpdatedAt:        Now(),
		DeletedAt:        nil,
		New:              false,
	},
}

// CreateLabelFixtures inserts known entities into the database for testing.
func CreateLabelFixtures() {
	for _, entity := range LabelFixtures {
		Db().Create(&entity)
	}
}
